#!/usr/bin/php
<?php
/**
 * DolphinGTK - phpGtk framework
 *
 * @package    DolphinGTK
 * @author     Askarov Ruslan
 * @copyright  Askarov Ruslan (c) 2010.
 * @link       http://groups.google.com/group/dolphingtk
 * @license    http://www.opensource.org/licenses/gpl-license.php GPL
 * @version    0.1
 * @since      PHP v.: 5.2.1
 * @subpackage desktop
 * @category   main
 * @filesource
 */

// обьявляем переменную, с абсолютным путём до файла
define('BASE_DIR', rtrim(str_replace('\\', '/', dirname(__FILE__)), '/'). '/');
// подключаем необходимые функции, для работы
include BASE_DIR . 'library/functions.php';

// подключение библиотек
load('widgets'); // работа с окном
load('window'); // работа с окном
load('sqlite'); // работа с sqlite
load('table');  // работа с табличками
load('tray');   // работа с треем
load('menu');   // работа с меню
load('os');     // и соответственно ОС

// запускаем только одну копию процесса
// в противном случае, просто ничего не
// произайдет. процесс умрёт.
// эта функция напрямую зависит от
// функции close_terms. только если
// установлен флаг=true, то в этом случае
// будет записан pid(posix), и по нему
// будет происходить проверка копии.
Win::close_if_copy();

// если нужно что бы процесс освободил
// терминал и стал независимым.
// для кого-то этот вариант очень
// удобен. так же записывается pid
// процесса.
Win::close_terms(true);

/**
 * Создаем окно приложения
 *
 * его нужно всегда создавать в начале
 * т.к. при создании окна, у нас задается
 * локаль, и идёт стандартная проверка
 * необходимых модулей самого php
 */
Win::create();


// проверим от кого запущена программа
// если вы пользователь ubuntu, то
// запуск программы производится
// следующим образом: gksu ./run.php
if( Win::$os == 'linux' )
{
  $user = OS::exec('whoami');

  if( $user != 'root' ) {
    Win::alert(
      'Security', i18n('Are you root? Use sudo or gksu prefix.')
    );
    exit;
  }
}
//
#---------------------------------------------------------------------------#
// 
/**
 * Меню основного окна.
 *
 * Для мультиязычности, используем функцию i18n
 * пример: i18n('Hello'); или i18n('Hello %s', 'Word');
 */
$menu = array();

$menu[ i18n('File') ] = array(
  array( i18n('Add new host'), array('Apache', 'prompt_win'), 'ctrl+n', 'new' ),
  array( i18n('Hide Window'), array('Tray', 'hide_or_show'), false, 'clear' ),
  array( i18n('Quit'), 'if_quit', 'ctrl+q', 'quit' )
);

$menu[ i18n('Manual') ] = array(
  array( i18n('About'), 'about', 'ctrl+a', 'images/about.png' ),
  array( i18n('Help'),  'menu', false, 'about' )
);

$menu[ i18n('Quit') ] = array('if_quit');
//
#---------------------------------------------------------------------------#
//
// Меню в трее
$tray_menu = array(
  array( i18n('About'), 'about', false, 'images/about.png'   ),
  array( i18n('Hide/Show'),  array('Tray', 'hide_or_show'), false, 'close' ),
  array( i18n('Quit'), 'if_quit', false, 'quit' )
);
//
#---------------------------------------------------------------------------#

// задали заголовк
Win::title('DolphinGTK v.0.1 - Apache');
// задали размер окна
Win::size(315,365);
// задали границы
Win::border(0);
// запретили менять размеры
Win::resizable(false);
// задали положение окна
Win::position('center');
// указали иконку
Win::icon('images/dolphin.png');
// задали функцию для отлова клавиш
Win::on_key('my_key');
// задали меню
Win::menu($menu);

// подгрузили наш модуль
Win::load('apache');
// подгрузили кнопки управления
Win::load('control');
// подгрузили копирайт
Win::load('copyright');
// задали статус бар
Win::statusbar( i18n('Ready ...') );
// и показали само окно
Win::show(true);
// если человек закрывает программу
Win::on_quit('if_quit');

// создали экземпляр в трее
Tray::create();
// добавили подсказку
Tray::tooltips('DolphinGTK v.0.1 - Apache Host control');
// добавили иконку
Tray::icon( 'images/dolphin.png' );
// создали меню. второй флаг - активация
// клика показ или сокрытие окна
Tray::menu( $tray_menu, true );
// подсказка
#Tray::notify(array('DolphinGTK Notify', 'Hello Word - message..'));
#Tray::notify( 'DolphinGTK Notify' );


// создали главное окно
Win::main();


/**
 * Функция для закрытия программы
 *
 * @return void
 */
function quit() {
  Gtk::main_quit();
}


/**
 * Функция для отработки клавиш
 *
 * @param  int $key
 * @return void
 */
function my_key( $key ) {

  // если клавиша F1, то просто выведем сообщение
  if( $key == 65470 )
  {
    Win::alert(
      WIN_TITLE, i18n('Справка недоступна!')
    );
  }

  // клавиша Esc, свернём окно в трей
  if( $key == 65307 ) {
    Tray::hide_or_show();
  }
}


/**
 * Функция, для отлова события при выходе
 *
 * @return bool
 */
function if_quit()
{
  $conf = Win::confirm(
    WIN_TITLE, i18n('Are you sure?')
  );

  if( $conf === true ) {
    quit();
    return false;
  }
  
  return true;
}


function about()
{
  $data = array(
  'program_name'        => 'DolphinGTK',
  'version'             => 'v.0.1',
  'comments'            => 'php-gtk framework',
  'copyright'           => 'Copyright (C) 2010 Askarov Ruslan',
  'website'             => 'http://groups.google.com/group/dolphingtk',
  'authors'             => array('GoTLiuM InSPiRiT(Аскаров Руслан) <gotlium@gmail.com>'),
  'artists'             => array('GoTLiuM InSPiRiT(Аскаров Руслан) <gotlium@gmail.com>'),
  'documenters'         => array('GoTLiuM InSPiRiT(Аскаров Руслан) <gotlium@gmail.com>'),
  'translator_credits'  => 'GoTLiuM InSPiRiT(Аскаров Руслан) <gotlium@gmail.com>',
  'license'             => 'http://www.opensource.org/licenses/gpl-license.php GPL'
  );

  Win::about($data);
}

function menu() {
  //
}
?>